package com.nbcio.pm.service;

import com.nbcio.pm.domain.vo.*;
import java.time.LocalDate;

/**
 * 项目管理报表统计Service接口
 *
 * @author nbacheng
 */
public interface IPmReportStatsService {

    /**
     * 获取项目总体统计
     *
     * @param tenantId 租户ID
     * @return 项目统计
     */
    PmProjectStatsVo getProjectStats(String tenantId);

    /**
     * 获取任务统计
     *
     * @param tenantId 租户ID
     * @param projectId 项目ID（可选）
     * @return 任务统计
     */
    PmTaskStatsVo getTaskStats(String tenantId, Long projectId);

    /**
     * 获取时间统计
     *
     * @param tenantId 租户ID
     * @param projectId 项目ID（可选）
     * @param startDate 开始日期（可选）
     * @param endDate 结束日期（可选）
     * @return 时间统计
     */
    PmTimeStatsVo getTimeStats(String tenantId, Long projectId, LocalDate startDate, LocalDate endDate);

    /**
     * 获取成员统计
     *
     * @param tenantId 租户ID
     * @param projectId 项目ID（可选）
     * @return 成员统计
     */
    PmMemberStatsVo getMemberStats(String tenantId, Long projectId);

    /**
     * 获取项目进度统计
     *
     * @param tenantId 租户ID
     * @return 项目进度统计列表
     */
    java.util.List<PmProjectProgressStatsVo> getProjectProgressStats(String tenantId);

    /**
     * 获取任务状态分布统计
     *
     * @param tenantId 租户ID
     * @param projectId 项目ID（可选）
     * @return 任务状态分布统计列表
     */
    java.util.List<PmTaskStatusStatsVo> getTaskStatusStats(String tenantId, Long projectId);

    /**
     * 获取时间跟踪统计
     *
     * @param tenantId 租户ID
     * @param projectId 项目ID（可选）
     * @param startDate 开始日期（可选）
     * @param endDate 结束日期（可选）
     * @return 时间跟踪统计列表
     */
    java.util.List<PmTimeTrackingStatsVo> getTimeTrackingStats(String tenantId, Long projectId, LocalDate startDate, LocalDate endDate);

    /**
     * 获取综合报表统计
     *
     * @param tenantId 租户ID
     * @param projectId 项目ID（可选）
     * @param startDate 开始日期（可选）
     * @param endDate 结束日期（可选）
     * @return 综合报表统计
     */
    PmReportStatsVo getComprehensiveStats(String tenantId, Long projectId, LocalDate startDate, LocalDate endDate);
}
